/**
 * 验证码模型
 * 用于存储邮箱验证码相关信息
 */

const { DataTypes } = require('sequelize');
const { logInfo, logError } = require('../logger');
const { sequelize } = require('../config/database');
const { Sequelize } = require('sequelize');

/**
 * 验证码模型定义
 */
const VerificationCode = sequelize.define('VerificationCode', {
  id: {
    type: DataTypes.BIGINT,
    primaryKey: true,
    autoIncrement: true
  },
  email: {
    type: DataTypes.STRING(100),
    allowNull: false,
    validate: {
      isEmail: true
    }
  },
  code: {
    type: DataTypes.STRING(10),
    allowNull: false
  },
  expiresAt: {
    type: DataTypes.DATE,
    allowNull: false,
    field: 'expires_at'
  },
  isUsed: {
    type: DataTypes.BOOLEAN,
    defaultValue: false,
    field: 'is_used'
  },
  purpose: {
    type: DataTypes.ENUM('register', 'reset_password', 'change_email'),
    allowNull: false,
    defaultValue: 'register'
  }
}, {
  tableName: 'verification_codes',
  timestamps: true,
  createdAt: 'created_at',
  updatedAt: 'updated_at',
  indexes: [
    {
      fields: ['email']
    },
    {
      fields: ['code']
    },
    {
      fields: ['expires_at']
    }
  ]
});

// 不自动同步模型到数据库，避免索引过多问题
// 如果需要同步，请手动处理或使用迁移脚本
logInfo('验证码模型加载完成，不自动同步');

module.exports = VerificationCode;